﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace Correo
{
    public partial class Principal : Form
    {
        private Servicios.Cuenta cuentaUsuario;

        internal Servicios.Cuenta CuentaUsuario
        {
            get { return cuentaUsuario; }
            set { cuentaUsuario = value; }
        }

        private Servicios.Buzon buzonEnVista;

        public Servicios.Buzon BuzonEnVista
        {
            get { return buzonEnVista; }
            set { buzonEnVista = value; }
        }

        private TreeNode nodoBuzon;

        public TreeNode NodoBuzon
        {
            get { return nodoBuzon; }
            set { nodoBuzon = value; }
        }

        public Principal(Servicios.Cuenta cuenta)
        {
            CuentaUsuario = cuenta;
            NodoBuzon = new TreeNode("Buzon Entrada");
            BuzonEnVista = new Servicios.CorreoClient().RecibirMensajes(CuentaUsuario.NombreCuenta);
            //Falta ponerle focus al al Inbox
            this.Text ="Bienvenido " + cuenta.Usuario.Nombre + " " +cuenta.Usuario.Apellido + " !";
            InitializeComponent();
            this.comboBox1.SelectedIndex = 0;
            DibujarArbolBuzon();
        }

        private void btnEnviarMensaje_Click(object sender, EventArgs e)
        {
            Servicios.CorreoClient srv = new Correo.Servicios.CorreoClient();
            new CrearMensajeFrm(CuentaUsuario.NombreCuenta).ShowDialog();
            srv.Close();
        }

        private void btnRecibirMensajes_Click(object sender, EventArgs e)
        {
            Servicios.CorreoClient srv = new Correo.Servicios.CorreoClient();
            Servicios.Buzon buzon = srv.RecibirMensajes(CuentaUsuario.NombreCuenta);
            DibujarListaMensajes();
            srv.Close();
        }

        private void DibujarArbolBuzon()
        {
                NodoBuzon.Nodes.Clear();
                this.arbolCarpetas.Nodes.Clear();
                this.arbolCarpetas.Nodes.Add(NodoBuzon);

            foreach(Servicios.ObjetoBuzon objBuzon in BuzonEnVista.ObjetosBuzon){
                if (objBuzon.GetType().Name.Equals("Carpeta"))
                {
                    TreeNode nodo = new TreeNode(((Servicios.Carpeta)objBuzon).Nombre);
                    nodo.Tag = objBuzon;
                    NodoBuzon.Nodes.Add(nodo);
                    DibujarArbolCarpetaHijos(nodo);

                }
            }
        }

        private void DibujarArbolCarpetaHijos(TreeNode nodoPadre)
        {

            foreach (Servicios.ObjetoBuzon objBuzon in ((Servicios.Carpeta)nodoPadre.Tag).ObjetosBuzon)
            {
                if (objBuzon.GetType().Name.Equals("Carpeta"))
                {
                    TreeNode nodo = new TreeNode(((Servicios.Carpeta)objBuzon).Nombre);
                    nodo.Tag = objBuzon;
                    nodoPadre.Nodes.Add(nodo);
                    DibujarArbolCarpetaHijos(nodo);
                }
            }
        }

        private void DibujarListaMensajes()
        {
            if (this.lstMensajes != null)
                this.lstMensajes.Items.Clear();
            foreach (Servicios.ObjetoBuzon objBuzon in BuzonEnVista.ObjetosBuzon)
            {
                if (objBuzon.GetType().Name.Equals("Mensaje"))
                {
                    ListViewItem item = new ListViewItem(((Servicios.Mensaje)objBuzon).Asunto);
                    item.Tag = objBuzon;
                    lstMensajes.Items.Add(item);
                }
            }
        }

        private void btnCrearCarpeta_Click(object sender, EventArgs e)
        {
            Servicios.CorreoClient srv = new Correo.Servicios.CorreoClient();
            TreeNode nodoSeleccionado = this.arbolCarpetas.SelectedNode;
            new CrearCarpetaFrm(this, nodoSeleccionado).ShowDialog();
            this.BuzonEnVista = srv.TraerBuzon(this.cuentaUsuario.NombreCuenta, BuzonEnVista.Tipo);
            srv.Close();
            DibujarArbolBuzon();
        }

        private void btnEliminarCarpeta_Click(object sender, EventArgs e)
        {
            Servicios.CorreoClient srv = new Correo.Servicios.CorreoClient();

            TreeNode nodoSeleccionado = this.arbolCarpetas.SelectedNode;

            if (nodoSeleccionado != null && nodoSeleccionado.Tag==null && nodoSeleccionado.Tag ==null)
            {
                srv.EliminarCarpetaEnCarpeta((Servicios.Carpeta)nodoSeleccionado.Parent.Tag, (Servicios.Carpeta)nodoSeleccionado.Tag);
            }
            else
            {
                
            }
            srv.Close();
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            Servicios.CorreoClient srv = new Correo.Servicios.CorreoClient();
            if (this.comboBox1.Text.Equals("Entrada"))
            {
                NodoBuzon = new TreeNode("Buzon Entrada");
                this.BuzonEnVista=srv.TraerBuzon(this.cuentaUsuario.NombreCuenta, "entrada");
            }
            else 
            {
                NodoBuzon = new TreeNode("Buzon Salida");
                this.BuzonEnVista = srv.TraerBuzon(this.cuentaUsuario.NombreCuenta, "salida");
            }
            srv.Close();
            this.DibujarArbolBuzon();


        }
    }
}
